package com.vhall.component.controller.gift.console;

import com.vhall.component.entity.gift.dto.*;
import com.vhall.component.entity.gift.vo.*;
import com.vhall.component.entity.page.vo.PageVO;
import com.vhall.component.plugin.common.annotation.TokenAuth;
import com.vhall.component.service.gift.ClsGiftService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * ClsGiftController- console端-表情管理相关接口
 *
 * @author xing.wang
 * @date 2022/10/9
 */
@RestController
@RequestMapping("/v4/gift/console")
@RequiredArgsConstructor
public class ClsGiftController {
    private final ClsGiftService service;

    /**
     * 获取关联表情列表-排除已经关联的表情,未关联
     *
     * @param vo 参数
     * @return 分页列表
     */
    @GetMapping("/unbind-list")
    @TokenAuth
    public PageVO<GiftListDataDTO> unboundRoomList(@Validated GiftUnbindRoomListVO vo) {
        return service.unboundRoomList(vo);
    }

    /**
     * 获取关联到房间的表情列表
     *
     * @param vo 参数
     * @return 已经绑定到当前房间的表情列表
     */
    @GetMapping("/bind-list")
    @TokenAuth
    public GiftPageDTO<GiftBindListDTO> bindRoomList(@Validated GiftBindRoomListVO vo) {
        return service.bindRoomList(vo);
    }

    /**
     * 进行房间与表情关联/修改发送频率设置
     *
     * @param vo 参数
     * @return 是否保存成功
     */
    @PostMapping("/bind")
    @TokenAuth
    public Boolean bindRoomChangeFrequency(@Validated GiftBindRoomVO vo) {
        return service.bindRoomChangeFrequency(vo);
    }

    /**
     * 取消关联
     *
     * @param vo 参数
     * @return 是否修改成功
     */
    @PostMapping("/unbind")
    @TokenAuth
    public Boolean unbindRoom(@Validated GiftUnbindRoomVO vo) {
        return service.unbindRoom(vo);
    }

    /**
     * 编辑关联房间表情的排序号
     *
     * @param vo 参数
     * @return 是否保存成功
     */
    @GetMapping("/set-sort")
    @TokenAuth
    public Boolean setSort(@Validated GiftChangeSortRoomVO vo) {
        return service.setSort(vo);
    }

    /**
     * 统计房间内表情数据信息
     *
     * @param vo 参数
     * @return 房间下表情统计信息列表
     */
    @GetMapping("/room-stat")
    @TokenAuth
    public PageVO<GiftRoomStatDTO> statRoomDataList(@Validated GiftRoomStatVO vo) {
        return service.statRoomDataList(vo);
    }

    /**
     * 房间表情赠送详情
     *
     * @param vo 参数
     * @return 表情详情列表
     */
    @GetMapping("/room-stat-detail")
    @TokenAuth
    public PageVO<GiftRoomStatDetailDTO> statRoomDetailDataList(@Validated GiftRoomStatDetailVO vo) {
        return service.statRoomDetailDataList(vo);
    }

    /**
     * 异步导出指定日期范围内的表情赠送数据
     *
     * @param vo 参数
     * @return 是否导出成功
     */
    @PostMapping("/export-gift-record")
    @TokenAuth
    public Boolean exportGift(GiftRecordExportVO vo) {
        return service.exportGift(vo);
    }
}
